Domain-Driven Design Quickly 日本語版
#ドメイン駆動設計 #書籍
https://www.infoq.com/jp/minibooks/domain-driven-design-quickly/
https://gyazo.com/f725a42402cea31a8739582b4e489d6e
本書の概要
ドメイン駆動設計についての速習講座
InfoQ のサイトから無料でダウンロードできる
ドメイン駆動設計の考え方が世の中の主流になるようにすることを目的としているらしい
内容メモ
イントロダクション
ソフトウェア設計は芸術であり、その方法としてはいくつかある
その中のひとつにドメイン駆動設計がある
Eric Evans が書籍にまとめた : エリック・エヴァンスのドメイン駆動設計
1 章 : ドメイン駆動設計とは何か
ソフトウェアを開発する目的は、実世界の作業の自動化だったりビジネス上の問題解決だったりする
つまり、ソフトウェアは具体的なドメインのためのソフトウェア
ソフトウェアは特定のドメインから生まれ、そのドメインと深くかかわっている
ドメインの知識を持っているのは、その業務にあたっている人たち (例えば銀行業務であれば銀行員)
ドメインに円滑に適合するソフトウェアを開発するには : ドメインの反映としてのソフトウェアを作る (ドメインをモデル化する)
例えば、銀行業務の知識がなくても、ドメインのモデルのコードを読むことで多くのことが理解できるように
まずはドメインの抽象を作る : ドメインモデル
ドメインモデルとは、何か特定の図などで表現されるものではなく、概念 (図や文書、コードなどでその概念を表現)
一人で作業するわけではないので、モデルを他人に伝えられる状態にすることが重要
ドメインの専門家とソフトウェアの専門家が一緒にドメインモデルを構築する例の紹介 (航空監視システムの例)
2 章 : ユビキタス言語
ドメインの専門家とソフトウェアの専門家のコミュニケーションの壁 : 言語の違い
ソフトウェアの専門家はソフトウェア開発の用語や思考で会話するし、ドメインの専門家は領域の専門用語を使う
共通言語の拠り所としてドメインモデルを使う
あらゆるコミュニケーションにこの言語を使う : ユビキタス言語と呼ばれる
ユビキタス言語をどう表現するか?
図を描いたり、UML で表現したり、文章を書いたりコードで表現したり、いろいろある
3 章 : モデル駆動設計
モデルからコードに至るまでの手法をどうするか?
分析モデルという設計手法 (?) があるが、これではモデルとコードが乖離しがち
コード設計者とは別の人がモデルを作るので、ソフトウェアに落とし込みにくいものになりやすい
より良い方法は、ドメインモデリングと設計を密接にすること
モデルを作成するときにはソフトウェアとその設計を考慮する
開発者もモデリングに参加する
モデル駆動設計で使われる重要なパターン
https://gyazo.com/1085dcf96a8e4a4d49089c83fa31b400
レイヤアーキテクチャ : アプリケーション内でドメインを分離する (ドメイン以外についても)
エンティティ (DDD) : 一意性をもつものとして分類できるオブジェクト
バリューオブジェクト
サービス (DDD)
モジュール
ドメインオブジェクトのライフサイクル管理のための 3 つのパターン
アグリゲート
ファクトリ
リポジトリ (DDD)
4 章 : リファクタリングのためのさらに深い考察
コードを対象としたリファクタリングはパターン化できるし、組織化して体系化することができる
一方で、モデルに対する、さらに深い洞察を得るためのリファクタリングはそういうわけにはいかない
リファクタリングをするのは、ドメインをより深く理解し、その理解に応じてモデルやコードを洗練させるためでもある
5 章 : モデルの完全性を維持する
複数チームが協働するような巨大プロジェクトの話
モデルの完全性を維持するための方法
https://gyazo.com/9bbad57be24589eb7c67068a16e2c470
コンテキスト境界
継続的な統合
コンテキストマップ
異なるコンテキスト同士の相互作用
共有カーネル
カスタマ-サプライヤ
順応者
防腐レイヤ
別々の道
公開ホストサービス
蒸留
6 章 : 今日における DDD の諸問題 : Eric Evans へのインタビュー
インタビューがある